import {
  All,
  Controller,
  Inject,
  Query,
  Logger,
  Body,
} from '@midwayjs/decorator';

import { ReqParam } from '../../../../../module/common/model/ReqParam';
import { Page } from '../../../../../module/common/model/Page';
import { ILogger } from '@midwayjs/logger';
import { ArticleService } from '../../../../../module/content/article.service';
import { Article } from '../../../../../entity/Article';
import { Context } from '@midwayjs/koa';
import { JwtPassportMiddleware } from '../../../../../middleware/jwt.passport.middleware';

/**
 * 员工Web用户中心内容文章控制器
 * 处理与文章相关的HTTP请求，如分页查询、根据ID查询、删除和更新
 */
@Controller('/staff/web/userCenter/content/article', { middleware: [JwtPassportMiddleware] })
export class StaffWebUserCenterContentArticleController {
  // 注入Context实例
  @Inject()
  private ctx: Context = null;
  // 注入Logger实例
  @Logger()
  private logger: ILogger = null;
  // 注入ArticleService实例
  @Inject()
  private articleService: ArticleService = null;
  /**
   * 分页查询文章
   * @param categoryId - 文章分类ID
   * @param query - 查询条件
   * @param params - 查询参数
   * @param reqParam - 请求参数
   * @param page - 分页信息
   * @returns 返回分页查询结果
   */
  @All('/page.json', )
  public async page(
    @Query('categoryId') categoryId = '',
    @Query('query') query: string,
    @Query('params') params: any,
    @Query() reqParam: ReqParam,
    @Query() page: Page,
  ): Promise<any> {
    // 记录日志
    this?.logger?.info?.('分页列表controller');

    // 获取当前用户ID
    const staffId: string = this?.ctx?.state?.user?.id;

    console?.log?.(staffId);

    // 调用articleService的page方法进行分页查询
    const data = await this?.articleService?.page?.(
      categoryId,
      query,
      params,
      reqParam,
      page
    );

    return data;
  }

  /**
   * 根据ID查询文章
   * @param id - 文章ID
   * @returns 返回查询结果
   */
  @All('/getById.json', )
  public async getById(@Query('id') id: string): Promise<any> {
    // 调用articleService的getById方法根据ID查询文章
    return await this?.articleService?.getById?.(id);
  }

  /**
   * 删除文章
   * @param ids - 文章ID数组
   * @returns 返回删除结果
   */
  @All('/del.json', )
  public async del(@Body() ids: string[]): Promise<any> {
    // 调用articleService的del方法删除文章
    await this?.articleService?.del?.(ids);
  }

  /**
   * 更新文章
   * @param obj - 文章对象
   * @returns 返回更新结果
   */
  @All('/update.json', )
  public async update(@Body() obj: Article): Promise<any> {
    // 调用articleService的update方法更新文章
    return await this?.articleService?.update?.(obj);
  }
}
